home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / bin / gzexe < prev    next >
Text File  |  2009-04-28  |  6KB  |  230 lines

  1. #!/bin/bash
  2. # gzexe: compressor for Unix executables.
  3. # Use this only for binaries that you do not use frequently.
  4. #
  5. # The compressed version is a shell script which decompresses itself after
  6. # skipping $skip lines of shell commands.  We try invoking the compressed
  7. # executable with the original name (for programs looking at their name).
  8. # We also try to retain the original file permissions on the compressed file.
  9. # For safety reasons, gzexe will not create setuid or setgid shell scripts.
  10.  
  11. # WARNING: the first line of this file must be either : or #!/bin/bash
  12. # The : is required for some old versions of csh.
  13. # On Ultrix, /bin/bash is too buggy, change the first line to: #!/bin/bash5
  14.  
  15.  
  16. # Copyright (C) 1998, 2002, 2004, 2006, 2007 Free Software Foundation
  17. # Copyright (C) 1993 Jean-loup Gailly
  18.  
  19. # This program is free software; you can redistribute it and/or modify
  20. # it under the terms of the GNU General Public License as published by
  21. # the Free Software Foundation; either version 2 of the License, or
  22. # (at your option) any later version.
  23.  
  24. # This program is distributed in the hope that it will be useful,
  25. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  26. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27. # GNU General Public License for more details.
  28.  
  29. # You should have received a copy of the GNU General Public License along
  30. # with this program; if not, write to the Free Software Foundation, Inc.,
  31. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  32.  
  33. tab='    '
  34. nl='
  35. '
  36. IFS=" $tab$nl"
  37.  
  38. version='gzexe (gzip) 1.3.12
  39. Copyright (C) 2007 Free Software Foundation, Inc.
  40. This is free software.  You may redistribute copies of it under the terms of
  41. the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
  42. There is NO WARRANTY, to the extent permitted by law.
  43.  
  44. Written by Jean-loup Gailly.'
  45.  
  46. usage="Usage: $0 [OPTION] FILE...
  47. Rename each FILE with a compressed version of itself, renaming FILE to FILE~.
  48.  
  49.   -d             Decompress each FILE instead of compressing it.
  50.       --help     display this help and exit
  51.       --version  output version information and exit
  52.  
  53. Report bugs to <bug-gzip@gnu.org>."
  54.  
  55.  
  56. PATH="${GZIP_BINDIR-'/bin'}:$PATH"
  57.  
  58. decomp=0
  59. res=0
  60. while :; do
  61.   case $1 in
  62.   -d) decomp=1; shift;;
  63.   --h*) exec echo "$usage";;
  64.   --v*) exec echo "$version";;
  65.   --) shift; break;;
  66.   *) break;;
  67.   esac
  68. done
  69.  
  70. if test $# -eq 0; then
  71.   echo >&2 "$0: missing operand
  72. Try \`$0 --help' for more information."
  73.   exit 1
  74. fi
  75.  
  76. tmp=
  77. trap 'res=$?
  78.   test -n "$tmp" && rm -f "$tmp"
  79.   (exit $res); exit $res
  80. ' 0 1 2 3 5 10 13 15
  81.  
  82. mktemp_status=
  83.  
  84. for i do
  85.   case $i in
  86.   -*) file=./$i;;
  87.   *)  file=$i;;
  88.   esac
  89.   if test ! -f "$file" || test ! -r "$file"; then
  90.     res=$?
  91.     echo >&2 "$0: $i is not a readable regular file"
  92.     continue
  93.   fi
  94.   if test $decomp -eq 0; then
  95.     if sed -e 1d -e 2q "$file" | grep "^skip=[0-9][0-9]*$" >/dev/null; then
  96.       echo >&2 "$0: $i is already gzexe'd"
  97.       continue
  98.     fi
  99.   fi
  100.   if test -u "$file"; then
  101.     echo >&2 "$0: $i has setuid permission, unchanged"
  102.     continue
  103.   fi
  104.   if test -g "$file"; then
  105.     echo >&2 "$0: $i has setgid permission, unchanged"
  106.     continue
  107.   fi
  108.   case /$file in
  109.   */basename | */bash | */cat | */chmod | */cp | \
  110.   */dirname | */echo | */expr | */gzip | \
  111.   */ln | */mkdir | */mktemp | */mv | */rm | \
  112.   */sed | */sh | */sleep | */test | */tail)
  113.     echo >&2 "$0: $i might depend on itself"; continue;;
  114.   esac
  115.  
  116.   dir=`dirname "$file"` || dir=$TMPDIR
  117.   test -d "$dir" && test -w "$dir" && test -x "$dir" || dir=/tmp
  118.   test -n "$tmp" && rm -f "$tmp"
  119.   if test -z "$mktemp_status"; then
  120.     type mktemp >/dev/null 2>&1
  121.     mktemp_status=$?
  122.   fi
  123.   if test $mktemp_status -eq 0; then
  124.     tmp=`TMPDIR=$dir mktemp -t gzexeXXXXXX`
  125.   else
  126.     tmp=$dir/gzexe$$
  127.   fi && { cp -p "$file" "$tmp" 2>/dev/null || cp "$file" "$tmp"; } || {
  128.     res=$?
  129.     echo >&2 "$0: cannot copy $file"
  130.     continue
  131.   }
  132.   if test -w "$tmp"; then
  133.     writable=1
  134.   else
  135.     writable=0
  136.     chmod u+w "$tmp" || {
  137.       res=$?
  138.       echo >&2 "$0: cannot chmod $tmp"
  139.       continue
  140.     }
  141.   fi
  142.   if test $decomp -eq 0; then
  143.     (cat <<'EOF' &&
  144. #!/bin/bash
  145. skip=44
  146.  
  147. tab='    '
  148. nl='
  149. '
  150. IFS=" $tab$nl"
  151.  
  152. umask=`umask`
  153. umask 77
  154.  
  155. gztmpdir=
  156. trap 'res=$?
  157.   test -n "$gztmpdir" && rm -fr "$gztmpdir"
  158.   (exit $res); exit $res
  159. ' 0 1 2 3 5 10 13 15
  160.  
  161. if type mktemp >/dev/null 2>&1; then
  162.   gztmpdir=`mktemp -dt`
  163. else
  164.   gztmpdir=/tmp/gztmp$$; mkdir $gztmpdir
  165. fi || { (exit 127); exit 127; }
  166.  
  167. gztmp=$gztmpdir/$0
  168. case $0 in
  169. -* | */*'
  170. ') mkdir -p "$gztmp" && rm -r "$gztmp";;
  171. */*) gztmp=$gztmpdir/`basename "$0"`;;
  172. esac || { (exit 127); exit 127; }
  173.  
  174. case `echo X | tail -n +1 2>/dev/null` in
  175. X) tail_n=-n;;
  176. *) tail_n=;;
  177. esac
  178. if tail $tail_n +$skip <"$0" | gzip -cd > "$gztmp"; then
  179.   umask $umask
  180.   chmod 700 "$gztmp"
  181.   (sleep 5; rm -fr "$gztmpdir") 2>/dev/null &
  182.   "$gztmp" ${1+"$@"}; res=$?
  183. else
  184.   echo >&2 "Cannot decompress $0"
  185.   (exit 127); res=127
  186. fi; exit $res
  187. EOF
  188.     gzip -cv9 "$file") > "$tmp" || {
  189.       res=$?
  190.       echo >&2 "$0: compression not possible for $i, file unchanged."
  191.       continue
  192.     }
  193.  
  194.   else
  195.     # decompression
  196.     skip=44
  197.     skip_line=`sed -e 1d -e 2q "$file"`
  198.     case $skip_line in
  199.     skip=[0-9] | skip=[0-9][0-9] | skip=[0-9][0-9][0-9])
  200.       eval "$skip_line";;
  201.     esac
  202.     case `echo X | tail -n +1 2>/dev/null` in
  203.     X) tail_n=-n;;
  204.     *) tail_n=;;
  205.     esac
  206.     tail $tail_n +$skip "$file" | gzip -cd > "$tmp" || {
  207.       res=$?
  208.       echo >&2 "$0: $i probably not in gzexe format, file unchanged."
  209.       continue
  210.     }
  211.   fi
  212.   test $writable -eq 1 || chmod u-w "$tmp" || {
  213.     res=$?
  214.     echo >&2 "$0: $tmp: cannot chmod"
  215.     continue
  216.   }
  217.   ln -f "$file" "$file~" || {
  218.     res=$?
  219.     echo >&2 "$0: cannot backup $i as $i~"
  220.     continue
  221.   }
  222.   mv -f "$tmp" "$file" || {
  223.     res=$?
  224.     echo >&2 "$0: cannot rename $tmp to $i"
  225.     continue
  226.   }
  227.   tmp=
  228. done
  229. (exit $res); exit $res
  230.